2023/12/231302字符

指针

package main

import "fmt"

func main() {
    var a int = 10
    var b *int = &a  // 指针变量
    var c **int = &b  // 指针的指针
    var d ***int = &c  // 指针的指针的指针
    fmt.Println(b, c, d)  //--> 0xc000014098 0xc00000e028 0xc00000e030
    fmt.Println(*c, *d)  //--> 0xc000014098 0xc00000e028
    fmt.Println(**d)  //--> 0xc000014098
}

数组指针

package main

import "fmt"

func main() {
    a := 1
    b := 2
    c := 3
    arr1 := [...]int{ a, b, c }
    arr2 := [...]*int{ &a, &b, &c }  // 指针数组
    fmt.Println(arr2)  //--> [0xc0000b2008 0xc0000b2010 0xc0000b2018]
    fmt.Println(&a, &b, &c)  //--> 0xc0000b2008 0xc0000b2010 0xc0000b2018
    fmt.Println(&arr1[0], &arr1[1])  //--> 0xc0000b4018 0xc0000b4020
}
package main

import "fmt"

func main() {
    sli := make([]int, 3, 3)
    fmt.Printf("%p %p\n", &sli, &sli[0])  //--> 0xc0000a4018 0xc0000b4018

    sliceChange(sli)
}

func sliceChange(sli []int) {
    sli[0] = 10
    fmt.Printf("%p %p\n", &sli, &sli[0])  //--> 0xc0000a4030 0xc0000b4018
}

通过指针浅克隆

package main

import "fmt"

func main() {
    car1 := Car{
        name: "BWM",
        color: "white",
    }
        
    car2 := &car1
    car2.name = "Benz"
    fmt.Println(car1, car2)  //--> {Benz white} {Benz white}
}

type Car struct {
    name string
    color string
}